package week6.day40.title29;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Objects;
import java.util.Scanner;

/**
 *
 * 请按照流程实现下列功能，可以提取方法，也可以将代码都写在main方法当中。
 * 首先定义一个Student类，类中提供id、name、age等属性。提供构造器，提供toString方法重写等。
 * 定义一个Student数组，长度为10
 * 接下来用控制台键盘录入给Student数组赋值，不一定要完全赋值10个对象，当输入的内容为exit时即可退出赋值；
 * 赋值完毕后，接下来将Student数组中的null元素去掉，获取一个没有null的Student数组
 * 然后对该Student数组中的元素进行自然排序，要求数组中的元素按照年龄从小到大排序；
 * 最后遍历数组，将数组中学生信息写入到记事本，每个学生数据占单独一行。
 * 注：是将该对象的toString方法结果字符串写到文件中，不是将对象写到文件中。
 * @Author fengzihao
 * @Date 2024-05-24 19:18
 */
public class T29 {
    public static void main(String[] args) {
        Student[] getInStudents = new Student[10];
        Scanner scanner = new Scanner(System.in);
        for (int i = 0; i < getInStudents.length; i++) {
            String name;
            int id;
            int age;
            System.out.println("请输入学生姓名：");
            if ("exit".equals(name = scanner.nextLine())){
                System.out.println("输入结束！");
                break;
            }
            System.out.println("请输入学生id：");
            id=Integer.parseInt(scanner.nextLine());
            System.out.println("请输入学生年龄：");
            age=Integer.parseInt(scanner.nextLine());
            getInStudents[i] = new Student(id, name, age);
            if (i==getInStudents.length-1)
                System.out.println("你已经输入了10个学生信息了，输入已完成");
        }
        Student[] students = getStudentsWithoutNull(getInStudents);
        Arrays.sort(students);
        writeToFile(students);
    }

    private static void writeToFile(Student[] students) {
        try (FileOutputStream fileOutputStream = new FileOutputStream("student.txt")) {
            for (Student student : students) {
                byte[] bytes = student.toString().getBytes();
                fileOutputStream.write(bytes);
                fileOutputStream.write("\r\n".getBytes());
            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }

    // 获得非空学生数组
    private static Student[] getStudentsWithoutNull(Student[] getInStudents) {
        ArrayList<Student> students = new ArrayList<>();
        for (Student getInStudent : getInStudents) {
            if (getInStudent != null)
                students.add(getInStudent);
        }
        Student[] students1 = new Student[1];
        return students.toArray(students1);
    }
}
class Student implements Comparable<Student>{
    int id;
    String name;
    int age;

    public Student() {
    }

    public Student(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return id == student.id && age == student.age && Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, name, age);
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public int compareTo(Student o) {
        return this.age-o.age;
    }
}
